package com.siqi.hr.system.custom.dao.intf;

import com.siqi.hr.system.common.enums.FieldPosition;
import com.siqi.hr.system.common.model.ExtraParameter;
import com.siqi.hr.system.custom.entity.FieldRecord;
import com.siqi.hr.system.organization.entity.Employee;

import java.util.List;
import java.util.Map;

/**
 * 处理员工与字段布局、过滤条件布局关系通用dao层
 * @author    xiaogq
 * @date         2016/8/24.
 */
public abstract interface FieldEmployeeDao {

	/**
	 * 查询当前登录员工设置的查询条件字段通用方法
	 * @author                     xiaogq
	 * @param extraParam         封装过滤条件相关对象信息
	 */
	public String queryEmployeeFilter(ExtraParameter extraParam) throws Exception;

	/**
	 * 查询实体列表布局或者过滤条件布局显示字段通用方法
	 * @param employee            当前登录系统的用户id
	 * @param entityId            实体id
	 * @param position            查询列表布局或过滤条件布局标识(List:列表布局，Filter：过滤条件布局)
     * @return
     */
	public abstract List<FieldRecord> queryEntityLayoutField(Employee employee, Integer entityId, FieldPosition position) throws Exception;

	/**
	 * 获取实体自己列表布局、过滤条件布局的数据
	 * @param employeeId               当前登录系统用户id
	 * @param entityId                  实体id
	 * @param position                  实体列表布局或过滤条件布局标识(List:列表布局，Falter：过滤条件布局)
     * @return
     */
	public List<FieldRecord> queryEmpSetEntityLayoutField(String employeeId, Integer entityId, FieldPosition position) throws Exception;

	/**
	 * 获取实体系统列表布局、过滤条件布局字段数据(xiaogq)
	 * @param entityId               实体id
	 * @param position               实体列表布局或过滤条件布局标识(List:列表布局，Falter：过滤条件布局)
	 * @return
	 */
	public List<FieldRecord> querySysSetEntityLayoutField(Integer entityId, FieldPosition position) throws Exception;

	/**
	 * 获取实体所有字段数据(xiaogq)
	 * entityId                 实体id
	 * @param position       实体列表布局或过滤条件布局标识(List:列表布局，Falter：过滤条件布局)
     * @return
     */
	public List<FieldRecord> queryAllEntityLayoutField(Integer entityId, FieldPosition position) throws Exception;

	/**
	 * 保存用户布局、过滤条件设置( xiaoxm)
	 * @param employeeId       当前登录系统用户Id
	 * @param entityId         实体Id
	 * @param position         列表布局或过滤条件字段标识（List:列表布局，Filter:过滤条件布局）
	 * @param fieldList        设置的字段信息
	 * @param isDefault        是系统布局还是自定义布局标识(true:系统布局，false：自定义布局)
     */
	public int saveFieldEmployeeLayout(String employeeId, Integer entityId, FieldPosition position, List<FieldRecord> fieldList, boolean isDefault) throws Exception;

	/**
	 *获取实体列头
	 * @author   xiaogq
	 * @param    emp（员工信息）
	 * @param    entityId（实体id）
	 * @param    showOperation（是否有操作列）
	 * @param    showOperation（是否有操作列）
	 * @return   showCheckbox 是否显示复选框
	 * @throws Exception
	 */
	public Map<String, Object> getEntityColumns(Employee emp, Integer entityId, Boolean showOperation,Boolean showCheckbox) throws Exception;

	/**
	 * 获取下拉框与单选多选数据
	 * @param entityId
	 * @param field
	 * @return
	 * @throws Exception
     */
	public List<Map<String, Object>> queryEntityFieldSelectBox(Integer entityId, FieldRecord field)throws Exception;
}